Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Literate Programming</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Literate_Programming"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Literate_Programming rootpage-Literate_Programming skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Literate Programming</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><p>Mit <span lang="en"><b>literate programming</b></span> (engl., näherungsweise mit <i>literarisches Programmieren</i> übersetzbar) bezeichnet man das Schreiben von <a href="Computerprogramm" title="Computerprogramm">Computerprogrammen</a> in einer Form, so dass sie vor allem für Menschen lesbar sind.
</p><p>Literate programming bedeutet technisch gesehen, dass sowohl die <a href="Dokumentation" title="Dokumentation">Dokumentation</a> als auch der <a href="Quelltext" title="Quelltext">Quelltext</a> des Programms in einer gemeinsamen <a href="Datei" title="Datei">Datei</a> vorhanden sind. Spezielle Werkzeuge sorgen dafür, dass sowohl der Quelltext als auch die Dokumentation aus dieser Datei extrahiert werden können. Da die für den Menschen geschriebene Dokumentation im Vordergrund steht, ist die Reihenfolge der Programmausdrücke so ausgelegt, dass diese verständlich dokumentiert werden können.
</p>

<div class="mw-heading mw-heading2"><h2 id="Motivation">Motivation</h2></div>
<p>In <i>Communications of the ACM</i> fragt 1986 Jon Bentley: <span lang="en">When was the last time you spent a pleasant evening in a comfortable chair, reading a good program?</span> (deutsch: „Wann war das letzte Mal, dass Sie einen angenehmen Abend in einem bequemen Sessel verbracht haben und dabei ein gutes Programm gelesen haben?“) Der Hintergrund dieser Frage beruht auf der Tatsache, dass zwar so mancher Programmierer hervorragende Arbeit leistet und dementsprechend gute Programme erstellt, dass aber kaum ein Programmierer seine Programme ausreichend dokumentiert.
</p>
<div class="mw-heading mw-heading2"><h2 id="Geschichte">Geschichte</h2></div>
<p>Die angesprochene Problematik wurde jedoch schon früher erkannt: Die erste Programmierumgebung, die literate programming unterstützte, war das von <a href="Donald_Knuth" class="mw-redirect" title="Donald Knuth">Donald Knuth</a> entwickelte <a href="WEB_(Programmiersprache)" title="WEB (Programmiersprache)">WEB</a>. 1981 für die Implementierung des <a href="TeX" title="TeX">TeX</a>-Systems entwickelt, benutzte es <a href="Pascal_(Programmiersprache)" title="Pascal (Programmiersprache)">Pascal</a> als Programmiersprache und TeX als Dokumentationsgenerator.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> Nachfolger von WEB war <a href="CWEB" class="mw-redirect" title="CWEB">CWEB</a>, welches <a href="C_(Programmiersprache)" title="C (Programmiersprache)">C</a> als Grundlage benutzte.
</p>
<div class="mw-heading mw-heading2"><h2 id="Eigenschaften_eines_Literate-Programming-Systems">Eigenschaften eines Literate-Programming-Systems</h2></div>
<p>Ein Literate-Programming-System ermöglicht Folgendes:
</p>
<ol><li>Quellcode und Kommentare können miteinander gemischt werden.</li>
<li>Die Quellcode-Abschnitte können in beliebiger Reihenfolge angeordnet werden. Das Literate-Programming-System setzt sie automatisch in der richtigen Reihenfolge zusammen, so dass sie ausgeführt werden können (<i>tangle</i>).</li>
<li>Aus Programm und Beschreibung kann automatisch eine lesbare Dokumentation mit Inhaltsverzeichnis, Verweisen, Registern etc. erstellt werden (<i>weave</i>).</li></ol>
<div class="mw-heading mw-heading2"><h2 id="Verwandte_Konzepte_und_Programme">Verwandte Konzepte und Programme</h2></div>
<p>Das ursprüngliche Konzept wurde schließlich von anderen Entwicklern übernommen und fand ebenfalls in anderen Programmiersprachen teilweise seinen Niederschlag.
</p>
<div class="mw-heading mw-heading3"><h3 id="Dokumentationsgeneratoren">Dokumentationsgeneratoren</h3></div>
<p>Der Dokumentationsgenerator <a href="Doxygen" title="Doxygen">Doxygen</a> (ähnlich wie <a href="Java_(Programmiersprache)" title="Java (Programmiersprache)">Java</a> mit <a href="Javadoc" title="Javadoc">Javadoc</a>) setzt das Konzept teilweise um: Speziell formatierte Kommentare im Quelltext (in einer der unterstützten Programmiersprachen) können extrahiert und in eine Dokumentation einbezogen werden. Im Unterschied zum ursprünglichen Gedanken wird durch dieses Konzept nur eine detailgetreue Spezifikation des Quelltextes und seiner Struktur ermöglicht (<a href="Funktionsparameter" class="mw-redirect" title="Funktionsparameter">Funktionsparameter</a> können genau spezifiziert werden). Eine vollständige Dokumentation des Quelltextes hingegen ist mit diesen Programmen nicht möglich, auch gerade weil eine Umordnung des Programms nicht möglich ist.
</p>
<div class="mw-heading mw-heading3"><h3 id="Spezielle_Programmiersprachen">Spezielle Programmiersprachen</h3></div>
<p>Die Programmiersprache <a href="Haskell_(Programmiersprache)" title="Haskell (Programmiersprache)">Haskell</a> erlaubt Literate Programming bereits auf Quelltextebene: Kommentare und Programmanweisungen können beliebig gemischt werden. Im Gegensatz zu anderen Programmiersprachen wird bei dieser Strategie der Quelltext speziell markiert – und nicht die dazugehörigen Kommentare. Eine Umordnung ist jedoch auch hier nicht möglich.
</p>
<div class="mw-heading mw-heading3"><h3 id="Generelle_Textsatzsysteme">Generelle Textsatzsysteme</h3></div>
<p>Durch geeignetes Verschränken von Quellcode und Kommentar kann man bei Einsatz geeigneter <a href="Textsatzsystem" class="mw-redirect" title="Textsatzsystem">Textsatzsysteme</a> Literate Programming erreichen. So kann man zum Beispiel C-Quellcode so schreiben, dass er mit dem C-Compiler zu einem Programm kompiliert werden kann, aber mit <a href="Troff" title="Troff">troff</a>/<a href="Groff" title="Groff">groff</a> daraus auch ein Postscript-Dokument mit Grafiken erzeugt werden kann. Dabei sind gegenüber „echten“ Literate-Programming-Tools einige Einschränkungen in der Funktionalität in Kauf zu nehmen, da eine spezielle Software mehr Möglichkeiten anbieten kann als generelle Textsatzsysteme.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Programming_by_Intention">Programming by Intention</h3></div>
<p>Programming by Intention (nicht zu verwechseln mit <a href="Intentionale_Programmierung" title="Intentionale Programmierung">Intentionaler Programmierung</a>) ist ein Konzept der <a href="Agile_Softwareentwicklung" title="Agile Softwareentwicklung">Agilen Softwareentwicklung</a>, welches besagt, dass bei der Implementierung von Methoden nicht wie üblich Algorithmen implementiert werden, sondern „nur“ Intentionen niedergeschrieben werden. Diese Intentionen entsprechen dann üblicherweise weiteren Hilfsmethoden oder einzeiligen Algorithmen. Damit wird sichergestellt, dass das Programm auch ohne Programmierkenntnisse äußerst einfach zu lesen ist.<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Software">Software</h2></div>
<ul><li><a href="WEB_(Programmiersprache)" title="WEB (Programmiersprache)">WEB</a> (das Original)</li>
<li><a href="Noweb" title="Noweb">Noweb</a></li>
<li><a href="CWEB" class="mw-redirect" title="CWEB">CWEB</a> von Marc van Leeuwen</li>
<li>funnelweb (basiert nicht auf WEB/CWEB)</li>
<li>fweb (Weiterentwicklung von CWEB)</li>
<li>LEO, „Literate Editor with Outlines“</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Literatur">Literatur</h2></div>
<ul><li>Donald E. Knuth: <cite style="font-style:italic">Literate Programming</cite>. In: <cite style="font-style:italic">The Computer Journal</cite>. <span style="white-space:nowrap">Band<span style="display:inline-block;width:.2em">&nbsp;</span>27</span>, <span style="white-space:nowrap">Nr.<span style="display:inline-block;width:.2em">&nbsp;</span>2</span>, 1984, <span style="white-space:nowrap">S.<span style="display:inline-block;width:.2em">&nbsp;</span>97–111</span>, <a href="Digital_Object_Identifier" title="Digital Object Identifier">doi</a>:<span class="uri-handle" style="white-space:nowrap"><a rel="nofollow" class="external text" href="https://doi.org/10.1093/comjnl%2F27.2.97">10.1093/comjnl/27.2.97</a></span> (<a rel="nofollow" class="external text" href="http://www.literateprogramming.com/knuthweb.pdf">Online</a> PDF).<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rfr_id=info:sid/de.wikipedia.org:Literate+Programming&amp;rft.atitle=Literate+Programming&amp;rft.au=Donald+E.+Knuth&amp;rft.date=1984&amp;rft.doi=10.1093%2Fcomjnl%2F27.2.97&amp;rft.genre=journal&amp;rft.issue=2&amp;rft.jtitle=The+Computer+Journal&amp;rft.pages=97-111&amp;rft.volume=27" style="display:none">&nbsp;</span></li>
<li>Stefan Mintert: <cite style="font-style:italic">Nicht ohne einen Namen. Literate Programming mit XSLT</cite>. In: <cite style="font-style:italic"><a href="IX_%E2%80%93_Magazin_f%C3%BCr_professionelle_Informationstechnik" title="IX – Magazin für professionelle Informationstechnik">iX</a></cite>. <span style="white-space:nowrap">Nr.<span style="display:inline-block;width:.2em">&nbsp;</span>4</span>, 2005, <span style="white-space:nowrap">S.<span style="display:inline-block;width:.2em">&nbsp;</span>135–137</span>.<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rfr_id=info:sid/de.wikipedia.org:Literate+Programming&amp;rft.atitle=Nicht+ohne+einen+Namen.+Literate+Programming+mit+XSLT&amp;rft.au=Stefan+Mintert&amp;rft.date=2005&amp;rft.genre=journal&amp;rft.issue=4&amp;rft.jtitle=iX&amp;rft.pages=135-137" style="display:none">&nbsp;</span></li>
<li>Stefan Lindner: <cite style="font-style:italic">Literarisches Programmieren</cite>. Donald E. Knuths WEB-System. In: <cite style="font-style:italic"><a href="C%E2%80%99t" title="C’t">c’t</a></cite>. <span style="white-space:nowrap">Nr.<span style="display:inline-block;width:.2em">&nbsp;</span>10</span>, 1990, <span style="white-space:nowrap">S.<span style="display:inline-block;width:.2em">&nbsp;</span>340</span>.<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rfr_id=info:sid/de.wikipedia.org:Literate+Programming&amp;rft.atitle=Literarisches+Programmieren&amp;rft.au=Stefan+Lindner&amp;rft.date=1990&amp;rft.genre=journal&amp;rft.issue=10&amp;rft.jtitle=c%E2%80%99t&amp;rft.pages=340" style="display:none">&nbsp;</span></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<ul><li><a rel="nofollow" class="external text" href="http://www.literateprogramming.com/">Literate Programming</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text">Der Quellcode von TeX wurde in <i>TeX: The program</i> von Donald Knuth veröffentlicht</span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.first.in-berlin.de/software/tools/multiple/">Beispiel für Einsatz von troff/groff für Literate Programming</a></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.netobjectives.net/files/books/esad/essential-skills-programming-by-intention.pdf">Programming by Intention, Essential Skills for the Agile Developer</a> (PDF; 731&nbsp;kB)</span>
</li>
</ol></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2023-12-13" href="https://de.wikipedia.org/wiki/?title=Literate_Programming&amp;oldid=240153832">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>